﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Dominio;

namespace Interfaz
{
    public partial class VentPlanesDePago : Form
    {
        #region atributos

        private List<PlanDePago> lPlanesDePago;
        private int ultimoIdPlan;
        private bool ingreso;
        private PlanDePago actualPlan;

        #endregion

        #region constructor

        public VentPlanesDePago()
        {
            InitializeComponent();
            ingreso = true;
            lPlanesDePago = Sistema.getPlanesDePago();
            ultimoIdPlan = Sistema.getUltimoIdPlanesDePago();
            limpiarCampos();
        }

        #endregion

        #region eventos

        private void BotonCancelar_Click(object sender, EventArgs e)
        {
            this.Dispose();
        }

        private void BotonAceptar_Click(object sender, EventArgs e)
        {
            if (validarDatos())
            {
                int cantDias = int.Parse(TextoCantDias.Text);
                int descuento = int.Parse(textBoxDescuento.Text);
                if (ingreso)
                {
                    ultimoIdPlan += 1;
                    actualPlan.OID = ultimoIdPlan;
                    actualPlan.Nombre = TextoNombre.Text;
                    actualPlan.CantDias = cantDias;
                    actualPlan.Descuento = descuento;                    
                    Sistema.agregarPlanDepago(cantDias, TextoNombre.Text, descuento);
                    lPlanesDePago.Add(actualPlan);
                    limpiarCampos();
                }
                else
                {
                    actualPlan.Nombre = TextoNombre.Text;
                    actualPlan.CantDias = cantDias;
                    actualPlan.Descuento = descuento;
                    Sistema.modificarPlanDePago(cantDias, TextoNombre.Text, descuento, actualPlan);
                    limpiarCampos();
                }               
            }
        }

        private void buttonNuevo_Click(object sender, EventArgs e)
        {            
            limpiarCampos();
        }

        //poner mensaje de confirmacion
        private void buttonEliminar_Click(object sender, EventArgs e)
        {
            if (listaPlanes.SelectedIndex != -1)
            {
                Sistema.eliminarPlanDePago(actualPlan);
                lPlanesDePago.Remove(actualPlan);
                limpiarCampos();
            }
        }

        private void listaPlanes_MouseClick(object sender, MouseEventArgs e)
        {
            if (listaPlanes.SelectedIndex != -1)
            {
                ingreso = false;
                actualPlan = (PlanDePago)listaPlanes.SelectedItem;
                labelId.Text = actualPlan.OID.ToString();
                TextoNombre.Text = actualPlan.Nombre;
                textBoxDescuento.Text = actualPlan.Descuento.ToString();
                TextoCantDias.Text = actualPlan.CantDias.ToString();
            }
        }

        private void TextoCantDias_TextChanged(object sender, EventArgs e)
        {
            try
            {
                int num = int.Parse(TextoCantDias.Text);
            }
            catch (Exception)
            {
                TextoCantDias.Text = "0";
            }
        }

        private void textBoxDescuento_TextChanged(object sender, EventArgs e)
        {
            try
            {
                int num = int.Parse(textBoxDescuento.Text);
            }
            catch (Exception)
            {
                textBoxDescuento.Text = "0";
            }
        }

        #endregion

        #region metodos

        private bool validarDatos()
        {
            bool ok = true;
            if (TextoNombre.Text.Equals("") && ok)
            {
                MessageBox.Show("Error. Nombre vacío");
                ok = false;
            }
            try
            {
                int num = int.Parse(TextoCantDias.Text);
            }
            catch (Exception)
            {
                MessageBox.Show("Error de formato en cantidad de días");
                ok = false;
            }
            try
            {
                int num = int.Parse(textBoxDescuento.Text);
            }
            catch (Exception)
            {
                MessageBox.Show("Error de formato en descuento");
                ok = false;
            }
            return ok;
        }

        private void limpiarCampos()
        {
            ingreso = true;
            labelId.Text = "";
            TextoNombre.Text = "";
            TextoCantDias.Text = "0";
            textBoxDescuento.Text = "0";
            listaPlanes.DataSource = lPlanesDePago.ToArray();
            actualPlan = new PlanDePago();
        }

        #endregion

    }
}
